package bombita.modelo;

import org.jdom2.Element;

import ar.uba.fi.algo3.titiritero.Dibujable;
import bombita.modelo.Interfaces.Danable;
import bombita.modelo.Items.*;
import bombita.modelo.Mapa.TokenMapa;
import bombita.modelo.Municiones.*;
import bombita.modelo.Obstaculos.*;
import bombita.modelo.Personajes.*;
import bombita.vista.Titiritero.FabricaDibujables;

public abstract class CosaDelMapa implements Danable, Interactuador
{
	protected TokenMapa miPosicion;
	protected boolean bloqueaMapa = false; 	
	
	public boolean estaLiberado()
	{
		return !bloqueaMapa;
	}
	
	public abstract void recibirDano(int dano);
	
	public void destruir(){
		miPosicion.remover();
	}
	
	public TokenMapa getPosicion(){
		return this.miPosicion;
	}
	
	public void setPosicion(TokenMapa nuevaPosicion){
		this.miPosicion = nuevaPosicion;
	}

	public abstract void interactuarCon(Interactuador unaCosa) throws NoPasarException;
	public void interactuarConSalida(Salida unaCosa){}
	public void interactuarConItem(Item unaCosa){}
	public void interactuarConItemTimer(ItemTimer unaCosa){}
	public void interactuarConItemChala(ItemChala unaCosa){}
	public void interactuarConItemToletole(ItemToletole unaCosa){}
	public void interactuarConProyectil(Proyectil unaCosa){}
	public void interactuarConLopezProyectil(LopezProyectil unaCosa){}
	public void interactuarConBomba(Bomba unaCosa){}
	public void interactuarConLopezBomba(LopezBomba unaCosa){}
	public void interactuarConMolotov(Molotov unaCosa){}
	public void interactuarConToletole(Toletole unaCosa){}
	public void interactuarConObstaculo(Obstaculo obstaculo){}
	public void interactuarConAcero(Acero unaCosa){}
	public void interactuarConCemento(Cemento unaCosa){}
	public void interactuarConLadrillo(Ladrillo unaCosa){}
	public void interactuarConPersonaje(Personaje unaCosa) throws NoPasarException{}
	public void interactuarConBombita(Bombita unaCosa){}
	public void interactuarConCecilio(Cecilio unaCosa){}
	public void interactuarConLopez(Lopez unaCosa){}
	public void interactuarConLopezVolador(LopezVolador unaCosa){}
	public void interactuarConExplosion(Explosion explosionNormal){}
	public void interactuarConExplosionNormal(ExplosionNormal unaCosa){}
	public void interactuarConExplosionToletole(ExplosionToletole unaCosa){}
	
	private Dibujable dibujableAsociado = null;
	
	public Dibujable dibujable ()
	{
		if (dibujableAsociado == null) {
			FabricaDibujables fabrica = new FabricaDibujables();
			dibujableAsociado = fabrica.crear(this);
		}
		return dibujableAsociado;
	}
	
	public Element serializar()
	{
		Element nodo = new Element(this.getClass().getName().substring("bombita.modelo.".length()));
		return nodo;
	}
	
	/** modifica el receptor para que concuerde con nodo 
	 * @throws Exception */
	public void aplicarSerializado(Element nodo) throws Exception {}
}
